#include"graph.h"
#include<bits/stdc++.h>
using namespace std;
namespace MAOJUN{

const int N=205;
int n=1,d[N],tr[N][N];
int dp[N][N];

int ie[N],fa[N],g[N][N];
void dfs1(int u){
    d[u]=NumberOfRoads();
    ie[u]=LastRoad();
    for(int i=1;i<=d[u];i++)if(i!=ie[u]){
        Move(i,2);
        if(Color()==1){tr[u][i]=++n;fa[n]=u;g[u][n]=i;dfs1(n);}
        else Move(LastRoad(),2);
    }
    if(~ie[u])Move(ie[u],2);
}
int s,as[N];
void dfs2(int u){
    for(int i=1;i<=d[u];i++){
        Move(i,1+(u!=s));
        if(Color()==1){dp[u][s]=dp[s][u]=1;Move(LastRoad(),1);}
        else if(tr[u][i])dfs2(tr[u][i]);
        else Move(LastRoad(),2);
    }
    if(~ie[u])Move(ie[u],1+(u!=s));
}
inline void main(int R){
    memset(dp,0x3f,sizeof dp);
    dfs1(1);
    for(int i=1;i<=n;i++)dp[i][i]=0;
    for(int u=1;u<=n;u++){
        vector<int>vc;
        for(int v=u;v^1;v=fa[v])vc.emplace_back(g[fa[v]][v]);
        reverse(vc.begin(),vc.end());
        for(int i:vc)Move(i,2);Move(1,1);Move(LastRoad(),2);for(int v=u;v^1;v=fa[v])Move(ie[v],2);
        s=u;dfs2(1);
        for(int i:vc)Move(i,2);Move(1,2);Move(LastRoad(),2);for(int v=u;v^1;v=fa[v])Move(ie[v],2);
    }
    for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)
        dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
    for(int i=1;i<=n;i++)for(int j=1;j<i;j++)
        if(dp[i][j]<=R)as[dp[i][j]]++;
    for(int i=1;i<=R;i++)Answer(i,as[i]);
}

}void Inspect(int R){MAOJUN::main(R);}